Process ID

프로그램: 바이너리, 코드 이미지, 응용 프로그램, Application 또는 실행파일 …
프로세스: 실행 중인 프로그램(메모리 적재+프로세스 상태 정보 포함, PCB)
스레드
    리눅스 프로세스는 기본 스레드 포함
    싱글스레드 프로세스: 기본 프로세스
    멀티스레드 프로세스: 여러 스레드 존재
프로세스 ID
pid, 각 프로세스는 해당 시점에 unique한 pid를 가진다.
pid 최대 값은 32768(2^15)
부호형(signed) 16비트 정수값(signed int)

$sudo vi /proc/sys/kernel/pid_max

!?—64비트 리눅스의 경우 최대 2^22까지 pid 가능
4194304=2^22

pid가 200이라면 이후 201, 202 와 같이 생성
프로세스 계층
$ps -aux
최초 프로세스: init프로세스, pid 1
init 프로세스는 운영체제가 생성, 이후 모든 프로세스는 init 프로세스로 부터 분할(아래 예제를 보니 다 그런건 아닌듯)
다른 프로세스는 또 다른 프로세스로부터 생성
    부모 프로세스, 자식 프로세스
ppid 값이 부모 프로세스의 pid를 뜻한다.
$ps -ef
-e    //시스템상의 모든 프로세스에 대한 정보 출력
-f    //다음 목록 출력(UID, PID, PPID, CPU%, STIME, TTY, TIME, CMD)

UID          PID    PPID  C STIME TTY          TIME CMD

root           1       0  0 00:49 ?        00:00:02 /sbin/init maybe-ubiquity

root           2       0  0 00:49 ?        00:00:00 [kthreadd]

root           3       2  0 00:49 ?        00:00:00 [rcu_gp]

root           4       2  0 00:49 ?        00:00:00 [rcu_par_gp]

root           6       2  0 00:49 ?        00:00:00 [kworker/0:0H-kblockd]

root           9       2  0 00:49 ?        00:00:00 [mm_percpu_wq]

root          10       2  0 00:49 ?        00:00:00 [ksoftirqd/0]

root          11       2  0 00:49 ?        00:00:04 [rcu_sched]

root          12       2  0 00:49 ?        00:00:00 [migration/0]

root          13       2  0 00:49 ?        00:00:00 [idle_inject/0]

root          14       2  0 00:49 ?        00:00:00 [cpuhp/0]

root          15       2  0 00:49 ?        00:00:00 [kdevtmpfs]

root          16       2  0 00:49 ?        00:00:00 [netns]

root          17       2  0 00:49 ?        00:00:00 [rcu_tasks_kthre]

root          18       2  0 00:49 ?        00:00:00 [kauditd]

root          19       2  0 00:49 ?        00:00:00 [khungtaskd]

root          20       2  0 00:49 ?        00:00:00 [oom_reaper]

root          21       2  0 00:49 ?        00:00:00 [writeback]

root          22       2  0 00:49 ?        00:00:00 [kcompactd0]

root          23       2  0 00:49 ?        00:00:00 [ksmd]

root          24       2  0 00:49 ?        00:00:00 [khugepaged]

root          70       2  0 00:49 ?        00:00:00 [kintegrityd]

root          71       2  0 00:49 ?        00:00:00 [kblockd]

root          72       2  0 00:49 ?        00:00:00 [blkcg_punt_bio]

root          73       2  0 00:49 ?        00:00:00 [tpm_dev_wq]

root          74       2  0 00:49 ?        00:00:00 [ata_sff]

root          75       2  0 00:49 ?        00:00:00 [md]

root          76       2  0 00:49 ?        00:00:00 [edac-poller]

root          77       2  0 00:49 ?        00:00:00 [devfreq_wq]

root          78       2  0 00:49 ?        00:00:00 [watchdogd]

root          81       2  0 00:49 ?        00:00:00 [kswapd0]

root          82       2  0 00:49 ?        00:00:00 [ecryptfs-kthrea]

root          84       2  0 00:49 ?        00:00:00 [kthrotld]

root          85       2  0 00:49 ?        00:00:00 [acpi_thermal_pm]

root          86       2  0 00:49 ?        00:00:00 [scsi_eh_0]

root          87       2  0 00:49 ?        00:00:00 [scsi_tmf_0]

root          88       2  0 00:49 ?        00:00:00 [scsi_eh_1]

root          89       2  0 00:49 ?        00:00:00 [scsi_tmf_1]

root          91       2  0 00:49 ?        00:00:00 [vfio-irqfd-clea]

root          93       2  0 00:49 ?        00:00:00 [ipv6_addrconf]

root         102       2  0 00:49 ?        00:00:00 [kstrp]

root         105       2  0 00:49 ?        00:00:00 [kworker/u3:0]

root         118       2  0 00:49 ?        00:00:00 [charger_manager]

root         119       2  0 00:49 ?        00:00:00 [kworker/0:1H-kblockd]

root         155       2  0 00:49 ?        00:00:00 [scsi_eh_2]

root         156       2  0 00:49 ?        00:00:00 [scsi_tmf_2]

root         158       2  0 00:49 ?        00:00:00 [cryptd]

root         188       2  0 00:49 ?        00:00:03 [irq/18-vmwgfx]

root         189       2  0 00:49 ?        00:00:00 [ttm_swap]

root         206       2  0 00:50 ?        00:00:00 [kdmflush]

root         232       2  0 00:50 ?        00:00:00 [raid5wq]

root         280       2  0 00:50 ?        00:00:00 [jbd2/dm-0-8]

root         281       2  0 00:50 ?        00:00:00 [ext4-rsv-conver]

root         355       1  0 00:50 ?        00:00:00 /lib/systemd/systemd-journal

root         382       1  0 00:50 ?        00:00:02 /lib/systemd/systemd-udevd

root         398       2  0 00:50 ?        00:00:00 [iprt-VBoxWQueue]

root         533       2  0 00:50 ?        00:00:00 [kaluad]

root         534       2  0 00:50 ?        00:00:00 [kmpath_rdacd]

root         535       2  0 00:50 ?        00:00:00 [kmpathd]

root         536       2  0 00:50 ?        00:00:00 [kmpath_handlerd]

root         537       1  0 00:50 ?        00:00:01 /sbin/multipathd -d -s

root         547       2  0 00:50 ?        00:00:00 [loop0]

root         553       2  0 00:50 ?        00:00:00 [loop1]

root         554       2  0 00:50 ?        00:00:00 [loop2]

root         557       2  0 00:50 ?        00:00:00 [loop3]

root         559       2  0 00:50 ?        00:00:00 [loop4]

root         560       2  0 00:50 ?        00:00:00 [loop5]

root         561       2  0 00:50 ?        00:00:00 [loop6]

root         563       2  0 00:50 ?        00:00:00 [jbd2/sda2-8]

root         564       2  0 00:50 ?        00:00:00 [ext4-rsv-conver]

systemd+     580       1  0 00:50 ?        00:00:00 /lib/systemd/systemd-timesyn

systemd+     634       1  0 00:50 ?        00:00:00 /lib/systemd/systemd-network

systemd+     636       1  0 00:50 ?        00:00:00 /lib/systemd/systemd-resolve

root         648       1  0 00:50 ?        00:00:00 /usr/lib/accountsservice/acc

root         651       1  0 00:50 ?        00:00:00 /usr/sbin/cron -f

message+     652       1  0 00:50 ?        00:00:00 /usr/bin/dbus-daemon --syste

root         657       1  0 00:50 ?        00:00:00 /usr/bin/python3 /usr/bin/ne

syslog       659       1  0 00:50 ?        00:00:00 /usr/sbin/rsyslogd -n -iNONE

root         660       1  0 00:50 ?        00:00:23 dockerd --group docker --exe

root         662       1  0 00:50 ?        00:00:02 /usr/lib/snapd/snapd

root         664       1  0 00:50 ?        00:00:00 /lib/systemd/systemd-logind

daemon       667       1  0 00:50 ?        00:00:00 /usr/sbin/atd -f

root         703       1  0 00:50 ?        00:00:00 sshd: /usr/sbin/sshd -D [lis

root         714       1  0 00:50 ?        00:00:00 /usr/lib/policykit-1/polkitd

root         721       1  0 00:50 ?        00:00:00 /usr/bin/python3 /usr/share/

root         881     660  0 00:50 ?        00:00:17 containerd --config /run/sna

root         902       2  0 00:50 ?        00:00:00 bpfilter_umh

root        1065       1  0 00:53 tty1     00:00:00 /bin/login -p --

celina      1197       1  0 00:53 ?        00:00:00 /lib/systemd/systemd --user

celina      1198    1197  0 00:53 ?        00:00:00 (sd-pam)

celina      1203    1065  0 00:53 tty1     00:00:00 -bash

root        1644       1  0 01:41 ?        00:00:03 /usr/lib/upower/upowerd

root        1891       2  0 02:08 ?        00:00:14 [kworker/0:0-mm_percpu_wq]

root        2282     703  0 02:29 ?        00:00:00 sshd: celina [priv]

celina      2406    2282  0 02:29 ?        00:00:01 sshd: celina@pts/0

celina      2407    2406  0 02:29 pts/0    00:00:00 -bash

root        3381       2  0 04:26 ?        00:00:00 [kworker/0:1-cgroup_destroy]

root        3829       2  0 05:37 ?        00:00:00 [kworker/u2:0-events_power_e

root        3862       2  0 05:42 ?        00:00:00 [kworker/u2:1-events_power_e

root        4096       2  0 06:23 ?        00:00:00 [kworker/u2:2-events_unbound

celina      4099    2407  0 06:24 pts/0    00:00:00 ps -ef

프로세스와 소유자(owner) 관계
리눅스 내부에서 프로세스의 소유자(사용자)와 그룹을 UID/GID(정수)로 관리
사용자에 보여줄 때만, UID와 사용자 이름 매핑 정보를 기반으로 사용자 이름으로 제공
$sudo vi /etc/passwd
//사용자 정보 저장(사용자 이름:x:UID:GID:사용자정보:사용자homedirectory:사용자가로그인할때실행시킬shellprogram
$sudo vi /etc/shadow
//사용자 패스워드를 암호화한 형태로 저장(*면 별도의 패스워드 없음)
$/etc/shadow의 암호 Hash

$Hashid$Salt$Hash value
Hashid
$1, $5, $6이 가장 많이 사용된다.
Salt
passwd-5

해시 솔트 참고(보안)

해시는 단방향함수입니다. 다시 말하면, A->B는 가능하지만 B->A는 불가능하다는 뜻입니다. 

결국 해시를 하고 난 값을 가지고 해시하기 전의 값을 못 구한다는 말입니다. 그래서 이를 공격하기 위해서 해커들은 레인보우테이블을 미리 구해둡니다. 

레인보우테이블은 모든 해시 쌍들을 구해놓은 것으로, 이를 통해 해시값들을 대입하여 고속으로 패스워드를 크랙할 수 있게합니다. 
일반 사용자는 아무리 비밀번호를 어렵게 해도 이에 대한 해시값만 해커가 대입을 한다면 패스워드가 노출될 수 밖에 없습니다. 
그래서 이를 좀 더 어렵게, 성가시게 하기 위해 salt를 넣습니다. salt는 해시를 하기전에 랜덤한 값을 참고하는데, 
해커가 salt값을 모른다면 레인보우테이블을 가지고 있어도 의미가 없습니다. 해당 salt 따른 값이 아니기 때문입니다.